<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>判断字符串中的{}、[]、()三种括号是否匹配，需要考虑嵌套的情况。</title>  
</head>

<body>
<script>
  /**
   *   i	执行对大小写不敏感的匹配。
   *   g	执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）
   * 
   *  这种方法，查找成对的括号，然后将成对相邻的括号替换成空字符串，也就是说删除。最后判断字符串的长度是否为0。是，则表示完全匹配，否则，不匹配。
   *   其实，这种方案就是典型的“从内部开始瓦解”。我们以{[()]}为例，你观察一下，现在只有最里面的()才是成对且相邻的，当把()替换成空字符串之后，[]变成了成对且相邻的，然后再将其替换成空字符串。就这样一直循环地查找，直到再也找不到成对且相邻的括号为止。
   * */
function validBraces(braces){
  while(/\(\)|\[\]|\{\}/g.test(braces)){
    braces = braces.replace(/\(\)|\[\]|\{\}/g,"")
  }
  return !braces.length;
}
//下面是测试
console.log(validBraces("(){}[]"))     // true 
console.log(validBraces("(}"))         // false 
console.log(validBraces("[(])"))      // false 
console.log(validBraces("([{}])"))     // true 
</script>
</body>
</html>
                                